drag: Make API offsets based
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 25 Mar 2014 12:22:51 +0000 (13:22 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Fri, 23 May 2014 17:54:24 +0000 (19:54 +0200)
It is generally more useful to get offsets right away,
than having to calculate those from the start point.

gtk/gtkgesturedrag.c
gtk/gtkgesturedrag.h

index 268b945713ff723207adadbb3a3aa69e675f1588..c14c10f000c8918d3aa1250a7dd5421a3e503b3f 100644 (file)
@@ -48,9 +48,15 @@ gtk_gesture_drag_begin (GtkGesture       *gesture,
                         GdkEventSequence *sequence)
 {
   GtkGestureDragPrivate *priv;
+  GdkEventSequence *current;
+
+  current = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
 
   priv = gtk_gesture_drag_get_instance_private (GTK_GESTURE_DRAG (gesture));
-  gtk_gesture_get_point (gesture, sequence, &priv->start_x, &priv->start_y);
+  gtk_gesture_get_point (gesture, current, &priv->start_x, &priv->start_y);
+  priv->last_x = priv->start_x;
+  priv->last_y = priv->start_y;
+
   g_signal_emit (gesture, signals[DRAG_BEGIN], 0, priv->start_x, priv->start_y);
 }
 
@@ -74,10 +80,13 @@ gtk_gesture_drag_end (GtkGesture       *gesture,
                       GdkEventSequence *sequence)
 {
   GtkGestureDragPrivate *priv;
+  GdkEventSequence *current;
   gdouble x, y;
 
+  current = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
+
   priv = gtk_gesture_drag_get_instance_private (GTK_GESTURE_DRAG (gesture));
-  gtk_gesture_get_point (gesture, sequence, &priv->last_x, &priv->last_y);
+  gtk_gesture_get_point (gesture, current, &priv->last_x, &priv->last_y);
   x = priv->last_x - priv->start_x;
   y = priv->last_y - priv->start_y;
 
@@ -155,8 +164,8 @@ gtk_gesture_drag_new (GtkWidget *widget)
  **/
 gboolean
 gtk_gesture_drag_get_start_point (GtkGestureDrag *gesture,
-                                  gint           *x,
-                                  gint           *y)
+                                  gdouble        *x,
+                                  gdouble        *y)
 {
   GtkGestureDragPrivate *priv;
 
@@ -175,10 +184,10 @@ gtk_gesture_drag_get_start_point (GtkGestureDrag *gesture,
 }
 
 /**
- * gtk_gesture_drag_get_current_point:
+ * gtk_gesture_drag_get_offset:
  * @gesture: a #GtkGesture
- * @x: X coordinate for the current point
- * @y: Y coordinate for the current point
+ * @x: X offset for the current point
+ * @y: Y offset for the current point
  *
  * If the @gesture is active, this function returns %TRUE and
  * fills in @x and @y with the coordinates of the current point,
@@ -189,9 +198,9 @@ gtk_gesture_drag_get_start_point (GtkGestureDrag *gesture,
  * Since: 3.14
  **/
 gboolean
-gtk_gesture_drag_get_current_point (GtkGestureDrag *gesture,
-                                    gint           *x,
-                                    gint           *y)
+gtk_gesture_drag_get_offset (GtkGestureDrag *gesture,
+                             gdouble        *x,
+                             gdouble        *y)
 {
   GtkGestureDragPrivate *priv;
 
@@ -201,10 +210,10 @@ gtk_gesture_drag_get_current_point (GtkGestureDrag *gesture,
   priv = gtk_gesture_drag_get_instance_private (gesture);
 
   if (x)
-    *x = priv->last_x;
+    *x = priv->last_x - priv->start_x;
 
   if (y)
-    *y = priv->last_y;
+    *y = priv->last_y - priv->start_y;
 
   return TRUE;
 }
index 1d0f706d21509fe5a7e06ec60e5b06f54cf5bc09..c2f76e6aaf0948e9db85ccbd37f084e8d7bcbf3d 100644 (file)
@@ -68,12 +68,12 @@ GtkGesture * gtk_gesture_drag_new               (GtkWidget      *widget);
 
 GDK_AVAILABLE_IN_3_14
 gboolean     gtk_gesture_drag_get_start_point   (GtkGestureDrag *gesture,
-                                                 gint           *x,
-                                                 gint           *y);
+                                                 gdouble        *x,
+                                                 gdouble        *y);
 GDK_AVAILABLE_IN_3_14
-gboolean     gtk_gesture_drag_get_current_point (GtkGestureDrag *gesture,
-                                                 gint           *x,
-                                                 gint           *y);
+gboolean     gtk_gesture_drag_get_offset        (GtkGestureDrag *gesture,
+                                                 gdouble        *x,
+                                                 gdouble        *y);
 
 G_END_DECLS